package com.nuedu.corejava.ch9;

public class ObjectClass {
	public static void main(String[] args) {
		// 新建3个字符串，并判断其是否相同
		// 字符串的创建有两种方式：
		String s1 = "abc";//在常量池中

		String s2 = new String("abc");

		String s3 = new String("abc");

		String s4 = "abc";

		System.out.println(s1 == s2);
		System.out.println(s2 == s3);
		System.out.println(s1 == s4);
		// ==运算符号在判断对象（引用数据类型）时，它的功能时判断两个对象的地址是否相同
		//常量池：常量池时JAVA语言提供的一种特殊的内存结构，用于储存程序运行过程中的常量，可以储存常量对象
		String s5 = "abcd";//字符串在储存时都会在常量池中进行保存，每个不同的字符串都会有自己的储存空间
		//判断两个对象的数据值是否相同，即判断两个对象是否同一个对象应该使用equals方法
		//equals方法时java.lang.Object提供的方法，用于判断两个对象是否为同一个对象（或某些对象的值是否相同）
		//string类重写了equals方法；
		System.out.println(s1.equals(s2));
		System.out.println(s2.equals(s3));
		System.out.println(s1.equals(s4));
		
		System.out.println("============================");
		
		
		Student student1= new Student(1001,"Jack");
		Student student2= new Student(1001,"Jack");
		Student student3 = student1;
		System.out.println(student1==student2);
		System.out.println(student1.equals(student2));
		System.out.println(student1==student3);
		
		
		//hashCode是哈希码，哈希码时通过哈希算法为每一个对象计算出唯一的值；即每个对象的哈希值时不同；
		//equals方法默认的判定就是判断两个对象的哈希值是否相同；故equals方法默认判断的是两个对象的引用是否指向如同一个对象；
		System.out.println(student1.hashCode());
		System.out.println(student2.hashCode());
		System.out.println(student2.hashCode());
		System.out.println("============================");
		//当使用输出语句输出一个对象，默认会调用toString方法吧对象转换成字符串进行输出
		//默认输出对象的 ： 类名@hashcode（使用16进制表示）
		//如果需要输出对象的值，需要重写Object的
		System.out.println(student1+","+student1.toString());
		System.out.println(student2+","+student2.toString());
		
		
		
		
	
	}

}
